﻿using System;

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;
using System.Configuration;


// connectionString="Data Source=POSEIDON;Initial Catalog=ControlPresupuesto;Persist Security Info=True;User ID=sa;Password=CPvq3wvcy3"
// connectionString="Data Source=AWILCHES;Initial Catalog=ControlPresupuesto;Persist Security Info=True;User ID=sa;Password=Alvaro86"

namespace ControlPresupuesto
{
    public partial class INDEX : Form
    {
        public ControlPresupuestoDataSet.spSeguridadUsuarioRow datosUsuario = null;

        public INDEX()
        {
            InitializeComponent();
        }

        private void inicio_Load(object sender, EventArgs e)
        {
            this.menuStrip.Items.Clear();

            //--- Verifico las conexiones.
            new FrmVerificarConexion().ShowDialog();
            
            //--- Cambio el nombre del formulario
            this.Text = Utils.get().getValorParametro("NombreEmpresa");
            
            //--- elimino los ITEM que tenga el menu principal
            this.menuStrip.Items.Clear();
            
            //--- Creo el ODBC Para las conexion de los reportes Crystal (Si aun no ha sido creado)
            try
            {
                System.Data.SqlClient.SqlConnectionStringBuilder builder = new System.Data.SqlClient.SqlConnectionStringBuilder();
                builder.ConnectionString = ConfigurationManager.ConnectionStrings[Utils.get().getValorParametro("SeccionAppConfigControlPresupuestoConnectionString")].ConnectionString;
                ODBCManager.get().CreateDSN(
                        builder.InitialCatalog + "(" + builder.DataSource + ")" //builder.DataSource + '.' + builder.InitialCatalog
                       , "DNS Creado automaticamente por la aplicacion '" + Application.ProductName + "'"// builder.DataSource + '.' + builder.InitialCatalog
                       , builder.DataSource
                       , "SQL SERVER"
                       , false
                       , builder.InitialCatalog
                       );
            }
            catch (Exception ex) 
            {
                FrmShowMessageException frmMsn = new FrmShowMessageException();
                frmMsn.Mensaje="Error Durante la creacion del ODBC:\n\n"+ex.ToString()+"\n\n"+ex.Message;
                frmMsn.ShowDialog();
            }
            
            //--- registro este formulario en la lista...
            ManageForms.addNewForm(this);

            ////--- inicio sesion...
            if (!this.iniciarSesion())
            {
                ManageForms.closeAllForms();
                return;
            }

            //--- Coloco los datos del usuario en la cabecera de la ventana y en el titulo del ventana
            this.usuarioSesionToolStripLabel.Text = this.datosUsuario.UserName;
            this.Text = this.Text + "(" + this.datosUsuario.Login + ") ";



            //--- Cargo los formularios a los que el usuario tenga acceso
            if (Utils.get().getValorParametro("CargarModulosAlIniciarAplicacion") == "SI")
            {
                new FrmCargarFormularios().ShowDialog();
            }
            
            //--- Cargo el Menu (La funcion es recursiva, por eso debo enviarle NULL en el parametro CodMenu)
            this.cargarMenu();
        }
        
        public bool iniciarSesion()
        {
            FrmLogin login = new FrmLogin();
            login.ShowDialog(this);
            if (login.DatosUsuario.Rows.Count.Equals(0))
            {
                return false;
            }
            this.datosUsuario = (ControlPresupuestoDataSet.spSeguridadUsuarioRow)login.DatosUsuario.Rows[0];             
            return true;
        }
                
        private void MenuItem_Click(object sender, EventArgs e)
        {            
            //--- Obtengo el formulario asociado al ITEM, se guardo en el campo TAG del item
            string formulario = ((ToolStripMenuItem)sender).Tag.ToString();

            //-- Verifico que tenga asociado un Formulario y que NO tenga Hijos
            if (formulario.Trim().Equals(string.Empty) || !((ToolStripMenuItem)sender).DropDownItems.Count.Equals(0))
            {
                return;
            }

            switch (formulario)
            {
                case "Cerrar Sesión":
                    {
                        ManageForms.closeAllForms();
                        break;
                    }
                case "FrmPresupuestoAnualDetalle":
                    {
                        try
                        {
                            ((FrmPresupuestoAnualDetalle)ManageForms.getFormulario(formulario, false, false, false)).Mostrar();
                            ManageForms.reloadForm(ManageForms.getFormulario(formulario, false, false, false));
                        }
                        catch (Exception ex) { MessageException.show(ex); }
                        break;
                    }
                case "FrmPresupuestoAnualEn3Fases":
                    {
                        try
                        {
                            ((FrmPresupuestoAnualEn3Fases)ManageForms.getFormulario(formulario, false, false, false)).Mostrar();
                            ManageForms.reloadForm(ManageForms.getFormulario(formulario, false, false, false));
                        }
                        catch (Exception ex) { MessageException.show(ex); }
                        break;
                    }
                //case "FrmCompromisos_Importar":
                //    {
                //        try
                //        {
                //            ((FrmCompromisos_Importar)ManageForms.getFormulario(formulario, false, false, false)).Hide();
                //            ((FrmCompromisos_Importar)ManageForms.getFormulario(formulario, false, false, false)).WindowState = FormWindowState.Normal;
                //            ((FrmCompromisos_Importar)ManageForms.getFormulario(formulario, false, false, false)).Show();
                //            //((FrmCompromisos_Importar)ManageForms.getFormulario(formulario, false, false, false)).BringToFront();
                //        }
                //        catch (Exception ex) { MessageException.show(ex); }
                //        break;
                //    }
                default:
                    {
                        try { ManageForms.open(formulario); }
                        catch (Exception ex) { MessageException.show(ex); }
                        break;
                    }                    
            }

        }

        public void cargarMenu()
        {
            Cursor.Current = Cursors.WaitCursor;
            this.menuStrip.Items.Clear(); 
            this.cargarMenu(this.menuStrip, null, (Utils.get().getValorParametro("OcultarOpcionesMenuInvalidas") == "SI" ? true : false));
            Cursor.Current = Cursors.Default;
        }
            
        private void cargarMenu(Object objeto, string CodMenu, Boolean OcultarOpcionesMenuInvalidas)
        {
            Cursor.Current = Cursors.WaitCursor;
            try
            {
                ControlPresupuestoDataSet.spSeguridadMenuDataTable table = new ControlPresupuestoDataSet.spSeguridadMenuDataTable();
                this.spSeguridadMenuTableAdapter1.FillBy(
                    table,
                    "SelectHijos",
                    null,
                    null,
                    null,
                    null,
                    CodMenu,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null
                );

                foreach (ControlPresupuestoDataSet.spSeguridadMenuRow row in table.Rows)
                {
                    ToolStripMenuItem temp = new ToolStripMenuItem();
                    temp.Name = row.Codigo.ToString();
                    temp.Text = row.etiqueta.ToString();
                    temp.Tag = (row.IsFormularioNull() ? string.Empty : row.Formulario.ToString());
                    temp.ToolTipText = row.descripcion.Trim();
                    temp.Image = (row.IsiconoNull() ? null : Image.FromStream(new MemoryStream(row.icono)));
                    temp.Enabled = row.MenuHabilitado;
                    temp.Click += new System.EventHandler(this.MenuItem_Click);
                    temp.Visible = (OcultarOpcionesMenuInvalidas && !row.MenuHabilitado ? false : true);

                    if (CodMenu==null)
                    {
                        ((MenuStrip)objeto).Items.Add(temp);
                    }
                    else
                    {
                        ((ToolStripMenuItem)objeto).DropDownItems.Add(temp);
                    }
                    this.cargarMenu(temp, row.Codigo, OcultarOpcionesMenuInvalidas);
                }
            }
            catch (Exception ex)
            {
                MessageException.show(ex);
                ManageForms.closeAllForms();
            }
        }

        private void INDEX_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (MessageBox.Show("¿Desea Salir de la aplicación?", "Confirmacion", MessageBoxButtons.YesNo) == DialogResult.No)
            {
                e.Cancel=true;
                return;
            }
            ManageForms.closeAllForms();
        }
    }
}
